#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <allegro.h>

#define LARGURA_JANELA  640
#define ALTURA_JANELA   480

using namespace std;

//deixando as variáveis globais apenas para nao ter q ficar passando-as por parametros
BITMAP *buffer;

BITMAP *fundoABC;        //imagem de fundo principal
BITMAP *fundoFazenda;    //imagem de fundo fazenda
BITMAP *fundoCidade;     //imagem de fundo cidade
BITMAP *fundoCredito;    //imagem de fundo creditos
BITMAP *fundoSoletracao; //imagem de fundo com as letras para soletrar

BITMAP *buttonUpCenario1, *buttonDownCenario1;  //botões para ativar cenario fazenda
BITMAP *buttonUpCenario2, *buttonDownCenario2;  //botões para ativar cenario cidade
BITMAP *buttonUpCreditos, *buttonDownCreditos;  //botões para ativar cenario creditos
BITMAP *buttonUpVoltar,   *buttonDownVoltar;    //botões para voltar ao cenario anterior

BITMAP  *img_A, *img_B, *img_C, *img_D, *img_E, *img_F, *img_G, *img_H, *img_I, *img_J,
        *img_K, *img_L, *img_M, *img_N, *img_O, *img_P, *img_Q, *img_R, *img_S, *img_T,
        *img_U, *img_V, *img_W, *img_X, *img_Y, *img_Z;

BITMAP *img_vaca;       //imagem do elementos da fazenda

int xBtCenario1, yBtCenario1, //coordenadas botao fazenda
    xBtCenario2, yBtCenario2, //coordenadas botao cidade
    xBtCredito,  yBtCredito,  //coordenadas botao creditos
    xBtVoltar,   yBtVoltar;   //coordenadas botao voltar

    //coordenadas das letrinhas
int xA, xB, xC, xD, xE, xF, xG, xH, xI, xJ,
    xK, xL, xM, xN, xO, xP, xQ, xR, xS, xT,
    xU, xV, xW, xX, xY, xZ,
    yA, yB, yC, yD, yE, yF, yG, yH, yI, yJ,
    yK, yL, yM, yN, yO, yP, yQ, yR, yS, yT,
    yU, yV, yW, yX, yY, yZ;

int qtdLetrinhas;

int xImgVaca, yImgVaca;       //coordenadas do elemento vaca da fazenda

        //flags para saber em qual modo se encontra o sistema
bool    bModoPrincipal,
        bModoFazenda,
        bModoCidade,
        bModoCredito,
        bModoSoletracao;

//************************************


void CarregaImagens()
{
    //carrega imagens de fundo
    fundoABC     = load_bmp("fundo_abc2.bmp", NULL);
    fundoFazenda = load_bmp("fundo_fazenda.bmp", NULL);
    fundoCidade  = load_bmp("fundo_cidade.bmp", NULL);
    fundoCredito = load_bmp("fundo_creditos.bmp", NULL);
    fundoSoletracao = load_bmp("fundo_soletracao.bmp", NULL);

    // carrega imagens dos botões (fazer os 2 estados (up/down) depois)
    buttonUpCenario1 = load_bmp("botao_fazenda.bmp", NULL);
    buttonUpCenario2 = load_bmp("botao_cidade.bmp", NULL);
    buttonUpCreditos = load_bmp("botao_credito.bmp", NULL);
    buttonUpVoltar   = load_bmp("botao_voltar2.bmp", NULL);

    //carrega imagens da fazenda
    img_vaca = load_bmp("vaca.bmp", NULL);

    //carrega imagens das letrinhas
    img_A = load_bmp("A.bmp", NULL);
    img_B = load_bmp("B.bmp", NULL);
    img_C = load_bmp("C.bmp", NULL);
    img_D = load_bmp("D.bmp", NULL);
    img_E = load_bmp("E.bmp", NULL);
    img_F = load_bmp("F.bmp", NULL);
    img_G = load_bmp("G.bmp", NULL);
    img_H = load_bmp("H.bmp", NULL);
    img_I = load_bmp("I.bmp", NULL);
    img_J = load_bmp("J.bmp", NULL);
    img_K = load_bmp("K.bmp", NULL);
    img_L = load_bmp("L.bmp", NULL);
    img_M = load_bmp("M.bmp", NULL);
    img_N = load_bmp("N.bmp", NULL);
    img_O = load_bmp("O.bmp", NULL);
    img_P = load_bmp("P.bmp", NULL);
    img_Q = load_bmp("Q.bmp", NULL);
    img_R = load_bmp("R.bmp", NULL);
    img_S = load_bmp("S.bmp", NULL);
    img_T = load_bmp("T.bmp", NULL);
    img_U = load_bmp("U.bmp", NULL);
    img_V = load_bmp("V.bmp", NULL);
    img_W = load_bmp("W.bmp", NULL);
    img_X = load_bmp("X.bmp", NULL);
    img_Y = load_bmp("Y.bmp", NULL);
    img_Z = load_bmp("Z.bmp", NULL);
}

//********DESENHOS***************
void DesenhaFundo(BITMAP *fundo, BITMAP *buffer)
{
    blit(fundo, buffer, 0, 0, 0, 0, LARGURA_JANELA, ALTURA_JANELA);

    blit(buffer, screen, 0, 0, 0, 0, LARGURA_JANELA, ALTURA_JANELA);
}


void DesenhaBotoesPrincipais()
{
    //todos estão na mesma posição em relação a abcissa
    xBtCenario1 = xBtCenario2 = xBtCredito = 320 - buttonUpCenario1->w / 2;

    //configurando o eixo da ordenada
    yBtCenario1 = ALTURA_JANELA/2 + 30;
    yBtCenario2 = yBtCenario1 + 60;
    yBtCredito = yBtCenario2 + 60;


    //desenhando os botões
    draw_sprite(fundoABC, buttonUpCenario1, xBtCenario1, yBtCenario1);
    draw_sprite(fundoABC, buttonUpCenario2, xBtCenario2, yBtCenario2);
    draw_sprite(fundoABC, buttonUpCreditos, xBtCredito,  yBtCredito);
}

void DesenhaBotaoVoltar(BITMAP *fundo)
{
    //configurando o eixo da abcissa
    xBtVoltar = 0;

    //configurando o eixo da ordenada
    yBtVoltar= ALTURA_JANELA - buttonUpVoltar->h;

    //desenhando o botão
    draw_sprite(fundo, buttonUpVoltar, xBtVoltar, yBtVoltar);
}

void DesenhaLetrinhas()
{
   yA = yB = yC = yD = yE = yF = ALTURA_JANELA/2 - 20;

       xA = 50;
       draw_sprite(fundoSoletracao, img_A, xA, yA);

       xB = xA + 100;
       draw_sprite(fundoSoletracao, img_B, xB, yB);

       xC = xB + 100;
       draw_sprite(fundoSoletracao, img_C, xC, yC);

       xD = xC + 100;
       draw_sprite(fundoSoletracao, img_D, xD, yD);

       xE = xD + 100;
       draw_sprite(fundoSoletracao, img_E, xE, yE);

       xF = xE + 100;
       draw_sprite(fundoSoletracao, img_F, xF, yF);

   yG = yH = yI = yJ = yK = yL = yA + 50;

       xG = 50;
       draw_sprite(fundoSoletracao, img_G, xG, yG);

       xH = xA + 100;
       draw_sprite(fundoSoletracao, img_H, xH, yH);

       xI = xB + 100;
       draw_sprite(fundoSoletracao, img_I, xI, yI);

       xJ = xC + 100;
       draw_sprite(fundoSoletracao, img_J, xJ, yJ);

       xK = xD + 100;
       draw_sprite(fundoSoletracao, img_K, xK, yK);

       xL = xE + 100;
       draw_sprite(fundoSoletracao, img_L, xL, yL);

   yM = yN = yO = yP = yQ = yR = yG + 50;

       xM = 50;
       draw_sprite(fundoSoletracao, img_M, xM, yM);

       xN = xM + 100;
       draw_sprite(fundoSoletracao, img_N, xN, yN);

       xO = xN + 100;
       draw_sprite(fundoSoletracao, img_O, xO, yO);

       xP = xO + 100;
       draw_sprite(fundoSoletracao, img_P, xP, yP);

       xQ = xP + 100;
       draw_sprite(fundoSoletracao, img_Q, xQ, yQ);

       xR = xQ + 100;
       draw_sprite(fundoSoletracao, img_R, xR, yR);

   yS = yT = yU = yV = yW = yX = yM + 50;

       xS = 50;
       draw_sprite(fundoSoletracao, img_S, xS, yS);

       xT = xS + 100;
       draw_sprite(fundoSoletracao, img_T, xT, yT);

       xU = xT + 100;
       draw_sprite(fundoSoletracao, img_U, xU, yU);

       xV = xU + 100;
       draw_sprite(fundoSoletracao, img_V, xV, yV);

       xW = xV + 100;
       draw_sprite(fundoSoletracao, img_W, xW, yW);

       xX = xW + 100;
       draw_sprite(fundoSoletracao, img_X, xX, yX);

    yY = yZ = yS + 50;

       xY = LARGURA_JANELA/2 - 2*img_Y->w;
       draw_sprite(fundoSoletracao, img_Y, xY, yY);

       xZ = LARGURA_JANELA/2 + img_Y->w;
       draw_sprite(fundoSoletracao, img_Z, xZ, yZ);
}

void DesenhaFiguraParaSoletracao(BITMAP *_imgFigura)
{
    draw_sprite(fundoSoletracao, _imgFigura, 50, 50);
}

void DesenhaElementosDaFazenda()
{
    //configurando o eixo da abcissa
    xImgVaca = 100;

    //configurando o eixo da ordenada
    yImgVaca = ALTURA_JANELA - img_vaca->h;

    //desenhando o botão
    draw_sprite(fundoFazenda, img_vaca, xImgVaca, yImgVaca);
}

void DesenhaPosicaoLetrinhaSoletrada(BITMAP *_imgLetrinha)
{
    draw_sprite(fundoSoletracao, _imgLetrinha, LARGURA_JANELA/2 + qtdLetrinhas*50, 50);
    DesenhaFundo(fundoSoletracao, buffer);
    show_mouse(screen);
    rest(200);

    qtdLetrinhas++;
}

//********CLICK***************

void TrataClickModoPrincipal()
{
    //clicou para ativar o cenario da fazenda
    if (mouse_x >= xBtCenario1 && mouse_x <= xBtCenario1 + buttonUpCenario1->w &&
        mouse_y >= yBtCenario1 && mouse_y <= yBtCenario1 + buttonUpCenario1->h)
    {
        bModoPrincipal = FALSE;
        bModoFazenda = TRUE;

        DesenhaBotaoVoltar(fundoFazenda);
        DesenhaElementosDaFazenda();
        DesenhaFundo(fundoFazenda, buffer);
        show_mouse(screen);
        rest(200);
    }
    else//clicou para ativar o cenario da cidade
    if (mouse_x >= xBtCenario2 && mouse_x <= xBtCenario2 + buttonUpCenario2->w &&
        mouse_y >= yBtCenario2 && mouse_y <= yBtCenario2 + buttonUpCenario2->h)
    {
        bModoPrincipal = FALSE;
        bModoCidade = TRUE;

        DesenhaBotaoVoltar(fundoCidade);
        DesenhaFundo(fundoCidade, buffer);
        show_mouse(screen);
        rest(200);
    }
    else//clicou para ativar o cenario dos créditos
    if (mouse_x >= xBtCredito && mouse_x <= xBtCredito + buttonUpCreditos->w &&
        mouse_y >= yBtCredito && mouse_y <= yBtCredito + buttonUpCreditos->h)
    {
        bModoPrincipal = FALSE;
        bModoCredito = TRUE;

        DesenhaBotaoVoltar(fundoCredito);
        DesenhaFundo(fundoCredito, buffer);
        show_mouse(screen);
        rest(200);
    }
}

void TrataClickModoFazenda()
{
    if ( mouse_x >= xImgVaca && mouse_x <= xImgVaca + img_vaca->w &&
         mouse_y >= yImgVaca && mouse_y <= yImgVaca + img_vaca->h)
    {
        bModoFazenda = FALSE;
        bModoSoletracao = TRUE;

        DesenhaBotaoVoltar(fundoSoletracao);
        DesenhaFiguraParaSoletracao(img_vaca);
        DesenhaLetrinhas();
        DesenhaFundo(fundoSoletracao, buffer);
        show_mouse(screen);
        rest(200);
    }
   else//clicou para voltar ao cenário pricipal
   if ( mouse_x >= xBtVoltar && mouse_x <= xBtVoltar + buttonUpVoltar->w &&
        mouse_y >= yBtVoltar && mouse_y <= yBtVoltar + buttonUpVoltar->h)
    {
        bModoFazenda = FALSE;
        bModoPrincipal = TRUE;

        DesenhaBotoesPrincipais();
        DesenhaFundo(fundoABC, buffer);
        show_mouse(screen);
        rest(200);
    }
}

void TrataClickModoCidade()
{
    if ( mouse_x >= xImgVaca && mouse_x <= xImgVaca + img_vaca->w &&
         mouse_y >= yImgVaca && mouse_y <= yImgVaca + img_vaca->h)
    {

    }
   else//clicou para voltar ao cenário pricipal
   if ( mouse_x >= xBtVoltar && mouse_x <= xBtVoltar + buttonUpVoltar->w &&
        mouse_y >= yBtVoltar && mouse_y <= yBtVoltar + buttonUpVoltar->h)
    {
        bModoCidade = FALSE;
        bModoPrincipal = TRUE;

        DesenhaBotoesPrincipais();
        DesenhaFundo(fundoABC, buffer);
        show_mouse(screen);
        rest(200);
    }
}

void TrataClickModoCredito()
{
   //clicou para voltar ao cenário pricipal
   if ( mouse_x >= xBtVoltar && mouse_x <= xBtVoltar + buttonUpVoltar->w &&
        mouse_y >= yBtVoltar && mouse_y <= yBtVoltar + buttonUpVoltar->h)
    {
        bModoCredito = FALSE;
        bModoPrincipal = TRUE;

        DesenhaBotoesPrincipais();
        DesenhaFundo(fundoABC, buffer);
        show_mouse(screen);
        rest(200);
    }
}

void TrataClickModoSoletracao()
{
   if ( mouse_x >= xA && mouse_x <= (xA + img_A->w) && mouse_y >= yA && mouse_y <= (yA + img_A->h))
        DesenhaPosicaoLetrinhaSoletrada(img_A);
   else
   if ( mouse_x >= xB && mouse_x <= (xB + img_B->w) && mouse_y >= yB && mouse_y <= (yB + img_B->h))
        DesenhaPosicaoLetrinhaSoletrada(img_B);
   else
   if ( mouse_x >= xC && mouse_x <= (xC + img_C->w) && mouse_y >= yC && mouse_y <= (yC + img_C->h))
        DesenhaPosicaoLetrinhaSoletrada(img_C);
   else
   if ( mouse_x >= xD && mouse_x <= (xD + img_D->w) && mouse_y >= yD && mouse_y <= (yD + img_D->h))
        DesenhaPosicaoLetrinhaSoletrada(img_D);
   else
   if ( mouse_x >= xE && mouse_x <= (xE + img_E->w) && mouse_y >= yE && mouse_y <= (yE + img_E->h))
        DesenhaPosicaoLetrinhaSoletrada(img_E);
   else
   if ( mouse_x >= xF && mouse_x <= (xF + img_F->w) && mouse_y >= yF && mouse_y <= (yF + img_F->h))
        DesenhaPosicaoLetrinhaSoletrada(img_F);
   else
   if ( mouse_x >= xG && mouse_x <= (xG + img_G->w) && mouse_y >= yG && mouse_y <= (yG + img_G->h))
        DesenhaPosicaoLetrinhaSoletrada(img_G);
   else
   if ( mouse_x >= xH && mouse_x <= (xH + img_H->w) && mouse_y >= yH && mouse_y <= (yH + img_H->h))
        DesenhaPosicaoLetrinhaSoletrada(img_H);
   else
   if ( mouse_x >= xI && mouse_x <= (xI + img_I->w) && mouse_y >= yI && mouse_y <= (yI + img_I->h))
        DesenhaPosicaoLetrinhaSoletrada(img_I);
   else
   if ( mouse_x >= xJ && mouse_x <= (xJ + img_J->w) && mouse_y >= yJ && mouse_y <= (yJ + img_J->h))
        DesenhaPosicaoLetrinhaSoletrada(img_J);
   else
   if ( mouse_x >= xK && mouse_x <= (xK + img_K->w) && mouse_y >= yK && mouse_y <= (yK + img_K->h))
        DesenhaPosicaoLetrinhaSoletrada(img_K);
   else
   if ( mouse_x >= xL && mouse_x <= (xL + img_L->w) && mouse_y >= yL && mouse_y <= (yL + img_L->h))
        DesenhaPosicaoLetrinhaSoletrada(img_L);
   else
   if ( mouse_x >= xM && mouse_x <= (xM + img_M->w) && mouse_y >= yM && mouse_y <= (yM + img_M->h))
        DesenhaPosicaoLetrinhaSoletrada(img_M);
   else
   if ( mouse_x >= xN && mouse_x <= (xN + img_N->w) && mouse_y >= yN && mouse_y <= (yN + img_N->h))
        DesenhaPosicaoLetrinhaSoletrada(img_N);
   else
   if ( mouse_x >= xO && mouse_x <= (xO + img_O->w) && mouse_y >= yO && mouse_y <= (yO + img_O->h))
        DesenhaPosicaoLetrinhaSoletrada(img_O);
   else
   if ( mouse_x >= xP && mouse_x <= (xP + img_P->w) && mouse_y >= yP && mouse_y <= (yP + img_P->h))
        DesenhaPosicaoLetrinhaSoletrada(img_P);
   else
   if ( mouse_x >= xQ && mouse_x <= (xQ + img_Q->w) && mouse_y >= yQ && mouse_y <= (yQ + img_Q->h))
        DesenhaPosicaoLetrinhaSoletrada(img_Q);
   else
   if ( mouse_x >= xR && mouse_x <= (xR + img_R->w) && mouse_y >= yR && mouse_y <= (yR + img_R->h))
        DesenhaPosicaoLetrinhaSoletrada(img_R);
   else
   if ( mouse_x >= xS && mouse_x <= (xS + img_S->w) && mouse_y >= yS && mouse_y <= (yS + img_S->h))
        DesenhaPosicaoLetrinhaSoletrada(img_S);
   else
   if ( mouse_x >= xT && mouse_x <= (xT + img_T->w) && mouse_y >= yT && mouse_y <= (yT + img_T->h))
        DesenhaPosicaoLetrinhaSoletrada(img_T);
   else
   if ( mouse_x >= xU && mouse_x <= (xU + img_U->w) && mouse_y >= yU && mouse_y <= (yU + img_U->h))
        DesenhaPosicaoLetrinhaSoletrada(img_U);
   else
   if ( mouse_x >= xV && mouse_x <= (xV + img_V->w) && mouse_y >= yV && mouse_y <= (yV + img_V->h))
        DesenhaPosicaoLetrinhaSoletrada(img_V);
   else
   if ( mouse_x >= xW && mouse_x <= (xW + img_W->w) && mouse_y >= yW && mouse_y <= (yW + img_W->h))
        DesenhaPosicaoLetrinhaSoletrada(img_W);
   else
   if ( mouse_x >= xX && mouse_x <= (xX + img_X->w) && mouse_y >= yX && mouse_y <= (yX + img_X->h))
        DesenhaPosicaoLetrinhaSoletrada(img_X);
   else
   if ( mouse_x >= xY && mouse_x <= (xY + img_Y->w) && mouse_y >= yY && mouse_y <= (yY + img_Y->h))
        DesenhaPosicaoLetrinhaSoletrada(img_Y);
   else
   if ( mouse_x >= xZ && mouse_x <= (xZ + img_Z->w) && mouse_y >= yZ && mouse_y <= (yZ + img_Z->h))
        DesenhaPosicaoLetrinhaSoletrada(img_Z);

   else//clicou para voltar ao cenário pricipal
   if ( mouse_x >= xBtVoltar && mouse_x <= xBtVoltar + buttonUpVoltar->w &&
        mouse_y >= yBtVoltar && mouse_y <= yBtVoltar + buttonUpVoltar->h)
    {
        bModoSoletracao = FALSE;
        bModoFazenda = TRUE;  //tratar isto aki pq pode voltar tanto pra fazenda quanto pra cidade

        DesenhaBotaoVoltar(fundoFazenda);
        DesenhaElementosDaFazenda();
        DesenhaFundo(fundoFazenda, buffer);
        show_mouse(screen);
        rest(200);
    }

}
void VerificaClick()
{
    if (mouse_b & 1)
    {
        if(bModoPrincipal)
            TrataClickModoPrincipal();
        else
        if(bModoFazenda)
            TrataClickModoFazenda();
        else
        if(bModoCidade)
            TrataClickModoCidade();
        else
        if(bModoCredito)
            TrataClickModoCredito();
        else
        if(bModoSoletracao)
            TrataClickModoSoletracao();

    }
}


//********PRINCIPAL***************
int main(void)
{
    //inicialização do allegro
    allegro_init();
    install_keyboard();
    install_mouse();
    install_timer();
    srand(time(NULL));
    set_color_depth(desktop_color_depth());

    //inicializando flags dos modos
    bModoPrincipal = TRUE;
    bModoFazenda = bModoCidade = bModoCredito = bModoSoletracao = FALSE;


    //setando o modo/resulução da tela que irá abrir
    if (set_gfx_mode(GFX_AUTODETECT_WINDOWED, LARGURA_JANELA, ALTURA_JANELA, 0, 0) != 0)
    {
        allegro_message(allegro_error);
        return 1;
    }

    //Nome da tela
    set_window_title("Aventuras do ABC");

    //configurando cursor
    enable_hardware_cursor();
    select_mouse_cursor(MOUSE_CURSOR_ARROW);
    show_mouse(screen);

    buffer = create_bitmap(LARGURA_JANELA, ALTURA_JANELA);

    CarregaImagens();
    DesenhaBotoesPrincipais();
    DesenhaFundo(fundoABC, buffer);

    qtdLetrinhas = 0;

    while(!key[KEY_ESC])
    {
        VerificaClick();
    }


    //fechando a biblioteca allegro
    allegro_exit();
    return 0;
}
END_OF_MAIN()
